Option Explicit

Implements IExpression
Implements ISubSelectContainer

'################################################################
' Field
'################################################################
' 当前条件的运算符: And 或者 Or
Private fieldConditionOperator As SqlEnum_ConditionOperator

' 当前条件的比较运算符
Private fieldComputeOperator As SqlEnum_CompareOperator

' 左侧运算元素
Private fieldLeftExpression As IExpression

' 右侧运算元素
Private fieldRightExpression As IExpression

'################################################################
' Constructor
'################################################################
Private Sub Class_Initialize()

End Sub

Private Sub Class_Terminate()

End Sub

'################################################################
' Init
'################################################################
' @param conditionOperatorVal 条件的运算符
' @param computeOperatorVal 比较运算符
' @param leftExpressionVal 左侧运算元素
' @param rightExpressionVal 右侧运算元素
Public Sub Init( _
    ByRef conditionOperatorVal As SqlEnum_ConditionOperator, ByRef computeOperatorVal As SqlEnum_CompareOperator, _
    ByRef leftExpressionVal As Variant, ByRef rightExpressionVal As Variant)
    ' 条件的运算符
    fieldConditionOperator = conditionOperatorVal
    ' 比较运算符
    fieldComputeOperator = computeOperatorVal
    ' 左侧运算元素
    Set fieldLeftExpression = leftExpressionVal
    ' 右侧运算元素
    Set fieldRightExpression = rightExpressionVal
End Sub

'################################################################
' Property
'################################################################
' 返回当前条件的运算符: And / Or
Public Property Get ConditionOperator() As SqlEnum_ConditionOperator
    ConditionOperator = fieldConditionOperator
End Property

' 返回当前条件中的比较运算符
Public Property Get ComputeOperator() As SqlEnum_CompareOperator
    ComputeOperator = fieldComputeOperator
End Property

' 返回当前条件表达式的左值(元素)
Public Property Get LeftExpression() As IExpression
    Set LeftExpression = fieldLeftExpression
End Property

' 返回当前条件表达式的右值(元素)
Public Property Get RightExpression() As IExpression
    Set RightExpression = fieldRightExpression
End Property

'################################################################
' Implements ISubSelectContainer
'################################################################
Public Function ISubSelectContainer_hasSubSelect() As Boolean
    ' 1. if subselect in leftElement
    ' 2. if subselect in rightElement
End Function

Public Function ISubSelectContainer_getSubSelects() As Collection
    ' 1. if subselect in leftElement
    ' 2. if subselect in rightElement
End Function
